package com.stars.common.signature;

import org.apache.commons.codec.digest.DigestUtils;

import java.util.Random;

/**
 * 
 * @description md5加密
 * @author Alex
 * @time 2016年10月1日下午5:24:48
 * @version 1.0
 */
public class MD5Util {


	/**
	 * 
	 * @description md5加密
	 * @author alex
	 * @date 2017年4月14日 下午7:01:48
	 * @version 1.0.0
	 * @param str
	 * @param uc true = 小写，false = 大写
	 * @return
	 */
	public final static String sign(String str,boolean uc) throws Exception {
		if (uc){
			return DigestUtils.md5Hex(str.getBytes("UTF-8")).toLowerCase();//小写
		}
		return DigestUtils.md5Hex(str.getBytes("UTF-8")).toUpperCase();//显示指定md5加密字符编码集，若tomcat的字符编码集不一致，则会出现加密错误
	}

	/**
	 * md5加密加盐
	 * @param str
	 * @param uc 第一次加密的大小写问题，true=小写，false=大写
	 * @param salt 第一次加盐
	 * @param salt2 第二次加盐
	 * @return	返回始终是大写的
	 * @throws Exception
	 */
	public final static String sign(String str,boolean uc,String salt,String salt2) throws Exception {
		String first = salt+sign(str,uc);
		String second = DigestUtils.sha1Hex(first.getBytes("UTF-8")).toUpperCase();
		String third = sign(second+salt2,false);
		return third;
	}


	/**
	 * 
	 * @description 生成固定长度的随机数
	 * @author alex
	 * @date 2016年12月23日 下午3:53:36
	 * @version 1.0.0
	 * @param length
	 *            需要生成的随机数长度(目前最长为6位)
	 * @return
	 */
	public static String getFixedRandom(Integer length) {
		Random rm = new Random();
		// 获得随机数
		double pross = (1 + rm.nextDouble()) * Math.pow(10, 6);
		// 将获得的获得随机数转化为字符串
		String fixLenthString = String.valueOf(pross);
		// 返回固定的长度的随机数
		return fixLenthString.substring(1, length + 1);
	}

	/**
	 * 给字符串固定位数
	 * @Author：我爱大金子
	 * @Description：描述
	 * @Date：13:00 2018/1/30
	 * @param value
	 * @param length
	 * @return
	 */
	public static String getFixedValue(String value, int length) {
		if (value.length() >= length) {
			return value;
		}

		StringBuilder sb = new StringBuilder();
		for(int i = 0; i < length - value.length(); i++) {
			sb.append("0");
		}
		sb.append(value);
		return sb.toString();
	}

}
